/*
 * Copyright 2012 Rivoli team
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.googlecode.rivoli.integration

import com.googlecode.rivoli.builder.Generator
import com.googlecode.rivoli.builder.configuration.ConfigurationBuilder
import com.googlecode.rivoli.configuration.Configuration
import com.googlecode.rivoli.model.classhierarchy.ClassHierarchyModel
import com.googlecode.rivoli.writer.text.TextWriter

import org.testng.annotations.BeforeSuite

abstract class IntegrationTest {
	private static Configuration configuration

	@BeforeSuite
	static void 'create configuration'() {
		Closure configurables = {
			'document model'(ClassHierarchyModel, (ClassHierarchyModel.PACKAGE_NAME): 'com.googlecode.rivoli.document')

			'text writer'(TextWriter)
		}

		[AluminumIntegrationTest].each {
			configurables <<= it.configurables
		}

		configuration = ConfigurationBuilder.build(configurables)
	}

	protected void generate(Closure generationSettings) {
		Generator.generate(configuration, {
			out = createOut()
		} << generationSettings)
	}

	protected abstract OutputStream createOut()
}